/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.bean.BeanArchivo;
import model.bean.BeanCurso;
import model.bean.BeanEstado;
import model.bean.BeanTipoArchivo;
import model.bean.BeanUsuario;
import model.daobase.DBase;

/**
 *
 * @author francotel
 */
public class DaoArchivo extends DBase {
    
    
    
    
    //listar
    
    public ArrayList<BeanArchivo> Archivolist() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();


        try {

            String query = "SELECT a.idarchivo,a.semestre,a.nota,a.like,a.num_descargas,cu.nommbre_curso,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado "
                    + "ORDER BY cu.nombre_curso";
     
            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            
            BeanArchivo archivo;
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setLike(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso= new BeanCurso();
                curso.setNombre_curso(res.getString(5));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(6));
                archivo.setDescripcion(res.getString(7));
                archivo.setFecha_subida(res.getDate(8));
                archivo.setTamaño(res.getDouble(9));
                BeanEstado estado= new BeanEstado();
                estado.setNombre_estado(res.getString(10));
                archivo.setEstado(estado);
                
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }
    
    public ArrayList<BeanArchivo> ArchivolistUser(int iduser) {
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanArchivo archivo = new BeanArchivo();

        try {

            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.megusta, a.num_descargas, a.idusuario, u.nombre, u.alias,"
                    + "a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
                    + "a.idtipoarchivo, ta.nombre_tipo"
                    + " FROM archivo a"
                    + " LEFT JOIN usuario u ON a.idusuario = u.idusuario"
                    + " LEFT JOIN curso cu ON a.idcurso = cu.idcurso"
                    + " LEFT JOIN estado e ON a.idestado = e.idestado"
                    + " LEFT JOIN tipoarchivo ta ON a.idtipoarchivo = ta.idtipoarchivo"
                    + " WHERE a.idusuario =" + iduser;


            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();


            while (res.next()) {
                archivo.setIdarchivo(res.getInt("idarchivo"));
                archivo.setSemestre(res.getString("semestre"));
                archivo.setNota(res.getInt("nota"));
                archivo.setLike(res.getInt("megusta"));
                archivo.setNum_descargas(res.getInt("num_descargas"));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt("idusuario"));
                busuario.setNombre(res.getString("nombre"));
                busuario.setAlias(res.getString("alias"));
                archivo.setUsuario(busuario);

                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt("idcurso"));
                curso.setNombre_curso(res.getString("nombre_curso"));
                curso.setTag(res.getString("tag"));
                archivo.setCurso(curso);


                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString("ruta"));
                archivo.setDescripcion(res.getString("descripcion"));
                archivo.setFecha_subida(res.getDate("fecha_subida"));
                archivo.setTamaño(res.getDouble("tamaño"));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt("idtipoarchivo"));
                tipoarchivo.setNombre_tipo(res.getString("nombre_tipo"));
                archivo.setTipoarchivo(tipoarchivo);
                System.out.print(archivo.getIdarchivo());
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }

    
    public ArrayList<BeanArchivo> Archivolistnoreportados() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();


        try {

            String query = "SELECT a.idarchivo,a.semestre,a.nota,a.like,a.num_descargas,cu.nommbre_curso,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.nombre,u.apellido "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado "
                    + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                    + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                    + "where a.idestado=1 "
                    + "ORDER BY cu.nombre_curso";
     
            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            
            BeanArchivo archivo;
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setLike(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso= new BeanCurso();
                curso.setNombre_curso(res.getString(5));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(6));
                archivo.setDescripcion(res.getString(7));
                archivo.setFecha_subida(res.getDate(8));
                archivo.setTamaño(res.getDouble(9));
                BeanEstado estado= new BeanEstado();
                estado.setNombre_estado(res.getString(10));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoarchivo=new BeanTipoArchivo();
                tipoarchivo.setNombre_tipo(res.getString(11));
                archivo.setTipoarchivo(tipoarchivo);
                BeanUsuario usuario=new BeanUsuario();
                usuario.setNombre(res.getString(12));
                usuario.setApellido(res.getString(13));
                archivo.setUsuario(usuario);
                
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }
     public ArrayList<BeanArchivo> Archivolistreportados() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();


        try {

            String query = "SELECT a.idarchivo,a.semestre,a.nota,a.like,a.num_descargas,cu.nommbre_curso,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado"
                    + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                    + "where a.idestado=0";
     
            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            
            BeanArchivo archivo;
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setLike(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso= new BeanCurso();
                curso.setNombre_curso(res.getString(5));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(6));
                archivo.setDescripcion(res.getString(7));
                archivo.setFecha_subida(res.getDate(8));
                archivo.setTamaño(res.getDouble(9));
                BeanEstado estado= new BeanEstado();
                estado.setNombre_estado(res.getString(10));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoarchivo=new BeanTipoArchivo();
                tipoarchivo.setNombre_tipo(res.getString(11));
                archivo.setTipoarchivo(tipoarchivo);
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }
    
    //borrar
    
    
    public void borrar(int idarchivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET idestado=-1"
                    + "where idarchivo="+idarchivo; 
                   
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
    //insertar
    
     public void insert(BeanArchivo archivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "INSERT into archivo(semestre,nota,idusuario,idcurso,ruta,descripcion,fecha_subida,tamaño,idestado,idtipoarchivo,numevaluacion) "
                    + "values('" + archivo.getSemestre() + "','" + archivo.getNota() + "','" + archivo.getUsuario().getIdusuario()
                    + "','" + archivo.getCurso().getIdcurso() + "','md5(concat(?,now()))','" + archivo.getDescripcion() + "',now(),'" + archivo.getTamaño() + "','" + archivo.getEstado().getIdestado() + "',"+archivo.getTipoarchivo().getIdtipoarchivo()+")";
            pstmt = conn.prepareStatement(query);
            pstmt.setString(1, archivo.getRuta());
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
     
     public void insertPDF(BeanArchivo archivo) {
        this.init_mysql();
        PreparedStatement pstmt = null;

        try {
            
           
            String query1 = " INSERT INTO archivo (semestre,nota,megusta,num_descargas,idusuario,idcurso,ruta,descripcion,fecha_subida,tamaño,idestado,idtipoarchivo) VALUES( ? , ? , null , null , ? , ? , ? , ? ,now(), ? ,1, ?)";

            pstmt = conn.prepareStatement(query1);

            pstmt.setString(1, archivo.getSemestre());
            pstmt.setInt(2, archivo.getNota());
            pstmt.setInt(3, archivo.getUsuario().getIdusuario());
            pstmt.setInt(4, archivo.getCurso().getIdcurso());
            pstmt.setString(5, archivo.getRuta());
            
            pstmt.setString(6, archivo.getDescripcion());
            pstmt.setDouble(7, archivo.getTamaño());
            pstmt.setInt(8, archivo.getTipoarchivo().getIdtipoarchivo());


            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }


    }
     
     // retorna ruta en md5 
     public String retornarutamd5(int iduser,double tamaño) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        String rutamd5="";
         try {
            String query = "select ruta from archivo where idusuario = ? and tamaño = ? ";
            pstmt = conn.prepareStatement(query);
            pstmt.setInt(1, iduser);
            pstmt.setDouble(2, tamaño);
            res = pstmt.executeQuery();
            
            while (res.next()) {
                rutamd5 = res.getString(1);
            }

            res.close();
            pstmt.close();
            conn.close();
        } catch (SQLException e1) {
            e1.getMessage();
        }
        return rutamd5;
    }
    
    
    
    
    //bloquear
     
     public void reportar(int idarchivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET idestado=0"
                    + "where idarchivo="+idarchivo; 
                   
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
   
       public void desreportar(int idarchivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET idestado=1"
                    + "where idarchivo="+idarchivo; 
                   
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
       
       
//        public BeanArchivo get(int id) {
//
//        this.init_mysql();
//        PreparedStatement pstmt = null;
//        ResultSet res = null;
//        BeanArchivo archivo = new BeanArchivo();
//
//        try {
//
//            String query = "SELECT a.idarchivo,a.semestre, a.nota,c.nombre_curso,a.ruta,a.descripcion,a.idestado, ta.nombre_tipo FROM archivo a"
//                    + "inner join curso cu "
//                    + "on a.idcurso=cu.idcurso "
//                    + "inner join tipoarchivo ta "
//                    + "on ta.idtipoarchivo=a.idtipoarchivo "
//                    + "WHERE idarchivo=" + id;
//
//            pstmt = conn.prepareStatement(query);
//            res = pstmt.executeQuery();
//
//            while (res.next()) {
//                archivo.setIdarchivo(res.getInt(1));
//                archivo.setSemestre(res.getString(2));
//                archivo.setNota(res.getInt(3));
//                
//                BeanCurso curso= new BeanCurso();
//                curso.setNombre_curso(res.getString(4));
//                archivo.setCurso(curso);
//                
//                archivo.setRuta(res.getString(5));
//                archivo.setDescripcion(res.getString(6));
//                
//                BeanEstado estado = new BeanEstado();
//                estado.setIdestado(res.getInt(7));
//                archivo.setEstado(estado);
//                
//                
//             
//            }
//
//            res.close();
//            pstmt.close();
//            conn.close();
//
//        } catch (SQLException e1) {
//            e1.getMessage();
//        }
//
//        return archivo;
//
//    }
        public BeanArchivo get(int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanArchivo archivo = new BeanArchivo();

        try {

            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.like, a.num_descargas, a.idusuario, u.nombre, u.alias,"
                    + "a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
                    + "a.idtipoarchivo, ta.nombre_tipo"
                    + " FROM archivo a"
                    + " LEFT JOIN usuario u ON a.idusuario = u.idusuario"
                    + " LEFT JOIN curso cu ON a.idcurso = cu.idcurso"
                    + " LEFT JOIN estado e ON a.idestado = e.idestado"
                    + " LEFT JOIN tipoarchivo ta ON a.idtipoarchivo = ta.idtipoarchivo"
                    + " WHERE a.idarchivo =" + id;

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            while (res.next()) {
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));

                archivo.setLike(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt(6));
                busuario.setNombre(res.getString(7));
                busuario.setAlias(res.getString(8));
                archivo.setUsuario(busuario);


                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt(9));
                curso.setNombre_curso(res.getString(10));
                curso.setTag(res.getString(11));
                archivo.setCurso(curso);

                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt(12));
                estado.setNombre_estado(res.getString(13));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString(14));
                archivo.setDescripcion(res.getString(15));
                archivo.setFecha_subida(res.getDate(16));
                archivo.setTamaño(res.getDouble(17));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt(18));
                tipoarchivo.setNombre_tipo(res.getString(19));
                archivo.setTipoarchivo(tipoarchivo);

            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return archivo;

    }

    public void update(BeanArchivo archivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {
            
            String query = "UPDATE archivo SET semestre='" + archivo.getSemestre() + "', nota=" + archivo.getNota() + ", idcurso=" + archivo.getCurso().getIdcurso()
                    + ", ruta='" + archivo.getRuta() + "', descripcion='" + archivo.getDescripcion()
                    + "', idestado=" + archivo.getEstado().getIdestado()
                    +", idtipoarchivo="+archivo.getTipoarchivo().getIdtipoarchivo()
                    + " WHERE idarchivo=" + archivo.getIdarchivo();
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
     
}
